package icsLearing;

import net.fortuna.ical4j.data.CalendarOutputter;
import net.fortuna.ical4j.data.ParserException;
import net.fortuna.ical4j.model.*;
import net.fortuna.ical4j.model.component.VEvent;
import net.fortuna.ical4j.model.component.VTimeZone;
import net.fortuna.ical4j.model.property.*;
import net.fortuna.ical4j.util.UidGenerator;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;


public class T1 {

    public static void main(String[] args) throws ParserException, IOException {

        final Long TIMEZONE_OFFSET = 28800000L;
        try {
            // 创建一个时区（TimeZone）
//            性能太慢了
            TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
            TimeZone timezone = registry.getTimeZone("Asia/Shanghai");
            VTimeZone tz = timezone.getVTimeZone();

            // 创建日历
            Calendar calendar = new Calendar();
            calendar.getProperties().add(new ProdId("-//ming//iCal4j 1.0.5.2 example//CN"));
            calendar.getProperties().add(Version.VERSION_2_0);
            calendar.getProperties().add(CalScale.GREGORIAN);

            // 时间主题
            String summary = "测试";
            // 开始时间
            DateTime start = new DateTime(System.currentTimeMillis() + TIMEZONE_OFFSET);
            // 开始时间转换为UTC时间（UTC ＋ 时区差 ＝ 本地时间 ）
            start.setUtc(true);
            // 结束时间
            DateTime end = new DateTime(System.currentTimeMillis() + TIMEZONE_OFFSET + 1000 * 60 * 60 * 24);
            // 结束时间设置成UTC时间（UTC ＋ 时区差 ＝ 本地时间 ）
            end.setUtc(true);
            // 新建普通事件
            // VEvent event = new VEvent(start, end, summary);
            // 定义全天事件（注意默认是UTC时间）
            VEvent event = new VEvent(start, end, summary);
//            VEvent event = new VEvent(new Date(1478016000000l), new Date(1478016000000l), summary);
            event.getProperties().add(new Location("移通"));
            // 生成唯一标示
            event.getProperties().add(new Uid(new UidGenerator("iCal4j").generateUid().getValue()));
            // 添加时区信息
//            event.getProperties().add(tz.getTimeZoneId());
            // 地区
            event.getProperties().add(new Description("测试详情"));
            event.getProperties().set(0, start);
            // 添加邀请者
//            Attendee dev1 = new
//                    Attendee(URI.create("mailto:dev1@mycompany.com"));
//            dev1.getParameters().add(Role.REQ_PARTICIPANT);
//            dev1.getParameters().add(new Cn("Developer 1"));
//            event.getProperties().add(dev1);
//            // 重复事件
//            Recur recur = new Recur(Recur.WEEKLY, Integer.MAX_VALUE);
//            recur.getDayList().add(WeekDay.MO);
//            recur.getDayList().add(WeekDay.TU);
//            recur.getDayList().add(WeekDay.WE);
//            recur.getDayList().add(WeekDay.TH);
//            recur.getDayList().add(WeekDay.FR);
//            RRule rule = new RRule(recur);
//            event.getProperties().add(rule);
//            // 提醒,提前10分钟
//            VAlarm valarm = new VAlarm(new Dur(0, 0, -10, 0));
//            valarm.getProperties().add(new Summary("Event Alarm"));
//            valarm.getProperties().add(Action.DISPLAY);
//            valarm.getProperties().add(new Description("Progress Meeting at 9:30am"));
//            // 将VAlarm加入VEvent
//            event.getAlarms().add(valarm);
//            // 添加事件
            calendar.getComponents().add(event);
            // 验证
            calendar.validate();
            FileOutputStream fout = new FileOutputStream(System.getProperty("user.dir") + File.separatorChar + "ics" + File.separatorChar + "2.ics");
            CalendarOutputter outputter = new CalendarOutputter();
            outputter.output(calendar, fout);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
